#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


// 实现守护进程
class Daemon
{
    const char* file_name = "/dev/null";
public:
    Daemon()
    {
        // 1.忽略信号
        signal(SIGSTOP, SIG_IGN);
        signal(SIGCLD, SIG_IGN);
        signal(SIGPIPE, SIG_IGN);
    
        // 2. 将自己变成独立会话
        if(fork() > 0) exit(0);
        setsid();

        // 3. 修改所在路径
        chdir("/");

        // 4. 修改标准输入输出
        int fd = open(file_name , O_RDWR);
        dup2(fd , 0);
        dup2(fd , 1);
        dup2(fd , 2);
    }
};